package admin.controllers;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import models.CoordinaModel;
import models.OrderModel;
import admin.data.CoordinaData;
import data.OrderData;


public class ReturnCoordinaServlet extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8955147493012178570L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws IOException {
		response.setCharacterEncoding("UTF-8");
		
		String path = ((HttpServletRequest) request).getRequestURI();
		String params = path.replaceAll("/admin/coordina/return/", "");
		if(params.length()>8)
		{			
			CoordinaModel coordinaModel = new CoordinaModel();
			CoordinaData coordinaData = new CoordinaData();
			coordinaModel = coordinaData.getById(params);
			if((coordinaModel==null)||(coordinaModel.getStatus()!=2))
			{
				HttpSession session = request.getSession();
				session.setAttribute("alert", "Mã tuyến sai hoặc tuyến đã được cập nhật giao nhận !");				
				response.sendRedirect("/admin/coordina/return/");
			}
			else
			{
				String[] listOrderId = coordinaModel.getListOrder().split(",");
				List<OrderModel> listOrder = new ArrayList<OrderModel>();
				for (int i = 0; i < listOrderId.length; i++) {
					if(listOrderId[i].length()>9)
					{
						OrderModel orderModel = OrderData.getOrder(listOrderId[i]);
						listOrder.add(orderModel);
					}
				}
				
				request.setAttribute("coordinaModel", coordinaModel);
				request.setAttribute("listOrder", listOrder);
		
				try {
					request.getRequestDispatcher("/admin/pages/return_coordina.jsp").forward(request, response);
				} catch (ServletException e) {
					e.printStackTrace();
				}
			}
		}
		else
		{
			try {
				request.getRequestDispatcher("/admin/pages/return_coordina_search.jsp").forward(request, response);
			} catch (ServletException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String action = (String) request.getParameter("action");
		String coordinaId = (String) request.getParameter("coordinaId");
		if (action.equalsIgnoreCase("search"))
		{
			response.sendRedirect("/admin/coordina/return/"+coordinaId);
		}
		if (action.equalsIgnoreCase("saveReturn"))
		{
			String listOrder = (String) request.getParameter("listOrder");
			
			CoordinaData coordinaData = new CoordinaData();
			CoordinaModel coordinaModel = coordinaData.getById(coordinaId);;
			coordinaModel.setStatus(3);
			coordinaModel.setCreated(new Date());
			coordinaData.insert(coordinaModel);		
			
			String[] list = listOrder.split(",");
			for (int i = 0; i < list.length; i++) {
				String[] params =  list[i].split("/");
				if (params[0].length() > 9) {
					OrderModel orderModel = OrderData.getOrder(params[0]);				
					String returnCoordina = params[1];
					orderModel.setReturnCoordina(returnCoordina);
					String status = params[2];
					if(status.equalsIgnoreCase("1"))
					{
						// Đã giao, chuyển trạng thái đơn hàng thành đã hoàn thành
						orderModel.setStatus(4);
					}
					else if(status.equalsIgnoreCase("2"))
					{
						// Khách hủy, hủy đơn hàng
						orderModel.setStatus(5);
					}
					else if(status.equalsIgnoreCase("3"))
					{
						// Khách hẹn lại, chuyển trạng thái đơn hàng thành khách hẹn lại, thêm ngày hẹn lại
						DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
						try {
							orderModel.setStatus(10);					
							Date newOrderDate = formatter.parse(params[3]);
							orderModel.setNewOrderDate(newOrderDate);
						} catch (Exception e) {
							orderModel.setStatus(5);
						}		
					}
					else if(status.equalsIgnoreCase("4"))
					{
						// Hết hàng, chuyển trạng thái về chưa xử lý
						orderModel.setStatus(1);
					}
					else if(status.equalsIgnoreCase("5"))
					{
						// Không liên lạc được, chuyển trạng thái chưa xử lý, thêm note
						orderModel.setStatus(1);
						orderModel.setNote(orderModel.getNote()+"<br/> - Không liên lạc được");
					}
					else if(status.equalsIgnoreCase("6"))
					{
						// Người khác giao, Hủy đơn hàng
						orderModel.setStatus(5);
					}
					else if(status.equalsIgnoreCase("7"))
					{
						// Không giao được, Hủy
						orderModel.setStatus(5);
					}
					
					OrderData.insert(orderModel);						
				}
			}			
	
			HttpSession session = request.getSession();
			session.setAttribute("success", "Cập nhật giao nhận thành công !");
			response.sendRedirect("/admin/coordina/return/");
		}
	}
}